package cn.gov.cbrc.east.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import cn.gov.cbrc.core.excp.BaseException;

/**
 * 项目名称：EastUpload<br>
 * *********************************<br>
 * <P>类名称：StringUtil</P>
 * *********************************<br>
 * <P>类描述：字符处理工具类</P>
 * 创建人：王川<br>
 * 创建时间：Jan 18, 2016 2:38:34 PM<br>
 * 修改人：王川<br>
 * 修改时间：Jan 18, 2016 2:38:34 PM<br>
 * 修改备注：<br>
 * @version 1.0<br>    
 */
public class StringUtil {
	
	
	/**
	 * <p>方法描述:将字符串分割成数据属性 </p>
	 * <p>方法备注:34[,]   44["]  </p>
	 * @param line
	 * @return
	 * @throws BaseException
	 * <p>创建人：王川</p>
	 * <p>创建时间：Jan 18, 2016 2:03:47 PM</p>
	 *
	 */
	public static List<String> splitStr(String line) throws BaseException {
		List<String> list = new ArrayList<String>();
		char firstChar,startChar,nextChar;
		int lineLength = line.length();
		for(int i = 0;i<lineLength;){
			firstChar = line.charAt(i);
			int j = i+1;
			//1、如果第一个字符是 , 说明是空串，优先处理
			if(firstChar==44){
				list.add("");
				i = j;
			}
			//2、如果字符串是以 " 开始的
			else if(firstChar==34&&j<lineLength){
				for(;j<lineLength-1;){
					startChar = line.charAt(j);
					//字符串中间出现 " 号，如果是文段中出现的 " 号,过滤掉；
					if(startChar==34 ){
						nextChar = line.charAt(j+1);
						//过滤掉文段中出现的 " 号
						if(nextChar==34)
							j++;
						else if(nextChar==44)
							break;
						else{
							//分割异常，返回空列表
							list.clear();
							return list;
							//throw new BaseException("[数据格式错误]:字符串中\"请用\"\"引号转义！");
						}
					}
					j++;
				}
				//字符串去掉起始 " 号 ; 并且将双引号替换
				String content = line.substring(i+1, j).replaceAll("\"\"", "\"");
				//最后在加上" 号
				list.add("\""+content+"\"");
				i = j+2;
			}
			//3、数字 或 非双引号包含的字符串(如果里面出现"则代表格式错误)
			else if(j<lineLength){
				for(;j<lineLength;j++){
					nextChar = line.charAt(j);
					if(nextChar==44){
						break;
					}
					if(nextChar==34){
						//分割异常，返回空列表
						list.clear();
						return list;
						//throw new BaseException("[数据格式错误]:字符或数字中出现\"请用双引号包含！");
					}
				}
				list.add(line.substring(i, j));
				i = j+1;
			}
			//4、如果末尾只有单字符处理
			else{
				list.add(line.substring(i));
				break;
			}
		}
		//5、如果末尾以 , 结束加入一个空串 
		if(line.endsWith(","))
			list.add("");
		return list;
	}
	
	
	/**
	 * <p>方法描述:获取表 code </p>
	 * <p>方法备注: </p>
	 * @param _filePath
	 * @return
	 * <p>创建人：王川</p>
	 * <p>创建时间：Mar 22, 2016 2:52:43 PM</p>
	 *
	 */
	public static String getTableCodeByFileName(String _filePath) {
		int index = _filePath.lastIndexOf(File.separator);
		int indexDot = _filePath.lastIndexOf(".");
		if (index < 0||indexDot<=index)
			return _filePath;
		String fileName = _filePath.substring(index + 1,indexDot);
		String[] str = fileName.split("-");
		if(str.length <2){
			return fileName;
		}
		return str[1];
	}
}
